package ModelLayer;

import java.util.ArrayList;

/**
 * VareContainer is a container for vare and produktGruppe objects.
 * 
 * */
public class VareContainer {

	/**
	 * ArrayLists for ProduktGruppe and Vare
	 * */
	private ArrayList<Vare> vareList;
	private ArrayList<ProduktGruppe> produktGruppeList;

	/**
	 * Singleton of VareContainer
	 * */
	private static VareContainer instance;

	private VareContainer() {
		vareList = new ArrayList<Vare>();
		produktGruppeList = new ArrayList<ProduktGruppe>();
	}

	/**
	 * Singleton method
	 * */
	public static VareContainer getInstance() {
		if (instance == null) {
			instance = new VareContainer();
		}
		return instance;
	}

	/**
	 * addVare method
	 * 
	 * @param int artikelNr, int vaegt, float pris, String vareGruppe, String
	 *        placering, int antal
	 * */
	public void createVare(int an, int va, float p, String vg, String pl,
			int antal) {
		Vare v = new Vare(an, va, p, vg, pl, antal);
		vareList.add(v);
		// Check if done can be removed after testing
		System.out.println("Vare added to list");
	}

	/**
	 * remove Vare from the arrayList. Find vare by artikelNr and remove that
	 * object.
	 * 
	 * @param int artikelNr
	 * */
	public void removeVare(int an) {
		boolean search = false;
		int index = 0;
		Vare v = null;
		while (!search && index < vareList.size()) {
			v = vareList.get(index);
			if (v.getArtikelNr() == an) {
				search = true;
			} else {
				index++;
			}
		}// loop end
		if (search) {
			vareList.remove(index);
		}
	}// removeVare end

	/**
	 * findVare method find vare by its artikelNr
	 * 
	 * @param int artikelNr
	 * */
	public Vare findVare(int an) {
		boolean search = false;
		int index = 0;
		Vare v = null;
		while (!search && index < vareList.size()) {
			v = vareList.get(index);
			if (v.getArtikelNr() == an) {
				search = true;
			} else {
				index++;
			}
		}
		if (search) {
			return v;
		} else {
			return null;
		}
	}

	public ProduktGruppe findPG(int gruppeNr) {
		boolean search = false;
		int index = 0;
		ProduktGruppe pg = null;
		while (!search && index < produktGruppeList.size()) {
			pg = produktGruppeList.get(index);
			if (pg.getGruppeNr() == gruppeNr) {
				search = true;
			} else {
				index++;
			}
		}
		if (search) {
			return pg;
		} else {
			return null;
		}
	}

	/**
	 * Add a produktGruppe object to produktGruppeList
	 * 
	 * @param String
	 *            beskrivelse, int gruppeNr
	 * */
	public void createProduktGruppe(String bs, int gn) {
		ProduktGruppe pg = new ProduktGruppe(bs, gn);
		produktGruppeList.add(pg);
	}

	/**
	 * remove produktGruppe from produktGruppelist
	 * 
	 * @param
	 * */
	public void removeProduktGruppe(int gn) {
		boolean search = false;
		int index = 0;
		ProduktGruppe p = null;
		while (!search && index < produktGruppeList.size()) {
			p = produktGruppeList.get(index);
			if (p.getGruppeNr() == gn) {
				search = true;
			} else {
				index++;
			}
		}// loop end
			// remove index object from arrayList
		if (search) {
			produktGruppeList.remove(index);
		}
	}// removeProduktGruppe end

	/**
	 * Find produktGruppe and add Vare to it.
	 * 
	 * @param int gruppeNr, int artikelNr
	 * */
	public void addVareToProduktGruppe(int gn, int an) {
		/**
		 * Loop through produktGruppeList and get a produktGruppe Object to
		 * store in a temp produktGruppe.
		 * */
		boolean search = false;
		int index = 0;
		ProduktGruppe p = null;
		while (!search && index < produktGruppeList.size()) {
			p = produktGruppeList.get(index);
			if (p.getGruppeNr() == gn) {
				search = true;
			} else {
				index++;
			}
		}// Loop end
			// If search is a match then add the vare to the ProduktGruppe
		if (search) {
			p.addVare(an);
		}
	}// AddVareToProduktGruppe method

	/**
	 * List of all Varer
	 * 
	 * */
	public ArrayList<Vare> listOfAllVarer() {
		return vareList;
	}
}
